#include "WPrincipal.h"


using namespace std;



WPrincipal::WPrincipal()
{
  setMinimumWidth(500);
  //Mise en place du layout de compression
  layout_compress = new QVBoxLayout();
  
  decompresser = new QCheckBox("Decompresser un fichier", NULL);
  
  compresser = new QGroupBox("Compresser avec :", NULL);

  layout_choix_algo = new QVBoxLayout();

  // rb_lz77 = new QRadioButton("lz77");
  // rb_lz77->setChecked(true);
  rb_lz78 = new QRadioButton("lz78");
  rb_lz78->setChecked(true);
  rb_huffman = new QRadioButton("huffman");
  rb_bzip = new QRadioButton("bzip");
  rb_deflate = new QRadioButton("deflate");

  // layout_choix_algo->addWidget(rb_lz77);
  layout_choix_algo->addWidget(rb_lz78);
  layout_choix_algo->addWidget(rb_huffman);
  layout_choix_algo->addWidget(rb_bzip);
  layout_choix_algo->addWidget(rb_deflate);

  compresser->setLayout(layout_choix_algo);
  compresser->setCheckable(true);
  compresser->setChecked(true);


  layout_compress->addWidget(decompresser);
  layout_compress->addWidget(compresser);

  wOptions = new QWidget();
  wOptions->setLayout(layout_compress);


  ////////////////Mise en place du layout contenant les boutons pour modification des fichiers

  //////////////L'entree
  layout_fichiers = new QVBoxLayout();


  entree = new QGroupBox("Fichier en entree");
  layout_entree = new QHBoxLayout();

  nom_fic_entr = new QLineEdit("Votre fichier en entree");
  pb_fichier_entree = new QPushButton("Parcourir");

  layout_entree->addWidget(nom_fic_entr);
  layout_entree->addWidget(pb_fichier_entree);
  entree->setLayout(layout_entree);

  //////////////La sortie
  sortie = new QGroupBox("Fichier en sortie");
  layout_sortie = new QHBoxLayout();

  nom_fic_sort = new QLineEdit("Votre fichier en sortie");
  pb_fichier_sortie = new QPushButton("Parcourir");

  layout_sortie->addWidget(nom_fic_sort);
  layout_sortie->addWidget(pb_fichier_sortie);

  sortie->setLayout(layout_sortie);

  pb_validation = new QPushButton("Compresser");

  // la mise en place
  layout_fichiers->addWidget(entree);
  layout_fichiers->addWidget(sortie);
  layout_fichiers->addWidget(pb_validation);

  wFichiers = new QWidget();
  wFichiers->setLayout(layout_fichiers);


  //La mise en place finale
  layout_principal = new QVBoxLayout();
  layout_principal->addWidget(wOptions);
  layout_principal->addWidget(wFichiers);

  setLayout(layout_principal);

  //////////////////////////////Les connexions


  QObject::connect(pb_fichier_entree,SIGNAL(clicked()),this,SLOT(changerEntree()));
  QObject::connect(pb_fichier_sortie,SIGNAL(clicked()),this,SLOT(changerSortie()));
  QObject::connect(decompresser,SIGNAL(clicked(bool)),this,SLOT(decompresser_checked(bool)));
  QObject::connect(compresser,SIGNAL(clicked(bool)),this,SLOT(compresser_checked(bool)));
  QObject::connect(pb_validation,SIGNAL(clicked()),this,SLOT(valider()));


}


void WPrincipal::changerEntree()
{
  QString entr = QFileDialog::getOpenFileName(this,"Fichier en entree",QString());
  if(entr != QString())
    nom_fic_entr->setText(entr);
}


void WPrincipal::changerSortie()
{
  QString sort;
  //On force la sortie à avoir une extension l3c pour mieux s'y retrouver//
  if(compresser->isChecked())
    sort = QFileDialog::getSaveFileName(this,"Fichier en sortie",QString(),".l3c");
  else
    sort = QFileDialog::getSaveFileName(this,"Fichier en sortie",QString());
  if(sort != QString())
    {
      if(compresser->isChecked() && sort.right(4) != ".l3c")
	sort += ".l3c";
      nom_fic_sort->setText(sort);
    }
}


void WPrincipal::compresser_checked(bool check)
{
  if(check)
    {
      decompresser->setChecked(false);
      pb_validation->setText("compresser");
    }
}

void WPrincipal::decompresser_checked(bool check)
{
  if(check)
    {
      compresser->setChecked(false);
      pb_validation->setText("decompresser");
    }
}


void WPrincipal::valider()
{
  if(nom_fic_entr->text() == "Votre fichier en entree")
    QMessageBox::critical(this, "Choisissez un fichier","Vous devez choisir un fichier en entree");
  else
    if(nom_fic_sort->text() == "Votre fichier en sortie")
      QMessageBox::critical(this, "Choisissez un fichier","Vous devez choisir un fichier en sortie");
    else
      {
	QString	prog = QString("../compress ")+nom_fic_entr->text()+" "+nom_fic_sort->text()+" ";
	if(decompresser->isChecked())
	  {
	    prog+="-d";
	  }
	else
	  {
	    prog+="-c -t ";
	    /*if(rb_lz77->isChecked())
	      prog+="lz77";*/
	    if(rb_lz78->isChecked())
	      prog+="lz78";
	    if(rb_huffman->isChecked())
	      prog+="huff";
	    if(rb_bzip->isChecked())
	      prog+="bzip";
	    if(rb_deflate->isChecked())
	      prog+="defl";
	  }

	QProcess* compression = new QProcess();
	compression->setProcessChannelMode(QProcess::ForwardedChannels);
	compression->startDetached(prog);
      } 
}
